package ecpay_practice2;
import java.util.HashSet;
import java.util.Set;
//HashSet使用多型的完整的範例
public class HashSetPractice {
public static void main(String[] args) {
Set<User> onlineUsers = new HashSet<>();
// 版本一:錯誤的示範 (The "Gotcha" Version)
User user1 = new User("Alice");
User user2 = new User("Alice");
User user3 = new User("Bob");
onlineUsers.add(user1);
onlineUsers.add(user2);
onlineUsers.add(user3);
System.out.println(onlineUsers);
}
}
class User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public User(String username) {
super();
this.username = username;
}
// 為了方便打印,我們覆寫一下 toString 方法
// toString() 不是來自任何介面 (Interface),而是來自所有Java類別的共同祖先——java.lang.Object 類別
// (Class)。
// 例如,如果你直接印出一個 User 物件,可能會得到像 User@15db9742 這樣的輸出,這對我們除錯或閱讀來說,資訊量非常低。
// 覆寫 (Override) 的目的:我們覆寫 toString()
// 方法,就是為了提供一個更有意義、更具可讀性的字串表示。我們希望看到的不是記憶體位址,而是物件內部的狀態(例如,使用者的名稱)。
@Override
public String toString() {
return username;
}
}